Debian 9 Stretch
Sponsored Link

Docker : Docker Swarm
2017/08/03
 
Configure Docker Swarm to create Docker Cluster with multiple Docker nodes.
On this example, Configure Swarm Cluster with 3 Docker nodes like follows.
There are 2 roles on Swarm Cluster, those are [Manager nodes] and [Worker nodes].
This example shows to set those roles like follows.
 -----------+---------------------------+--------------------------+------------
            |                           |                          |
        eth0|10.0.0.51              eth0|10.0.0.52             eth0|10.0.0.53
 +----------+-----------+   +-----------+----------+   +-----------+----------+
 | [ node01.srv.world ] |   | [ node02.srv.world ] |   | [ node03.srv.world ] |
 |       Manager        |   |        Worker        |   |        Worker        |
 +----------------------+   +----------------------+   +----------------------+

[1]
[2] Configure Swarm Cluster on Manager Node.
root@node01:~#
docker swarm init

Swarm initialized: current node (vcns353o59ye47zw5mi7dmdua) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2nz54ltw9rshwlkqrmrhm83yqjje6wdd94ymxrx_
           zzt5h4qtuxn-au471rbfach5zq8niqygz7xsv 10.0.0.51:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[3] Join in Swarm Cluster on all Worker Nodes.
It's OK to run the command which was shown when running swarm init on Manager Node.
root@node02:~#
docker swarm join \
--token SWMTKN-1-2nz54ltw9rshwlkqrmrhm83yqjje6wdd94ymxrxzzt5h4qtuxn-au471rbfach5zq8niqygz7xsv \
10.0.0.51:2377

This node joined a swarm as a worker.
[4] Verify with a command [node ls] that worker nodes could join in Cluster normally.
root@node01:~#
docker node ls

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS
tavuctuc6vhlccqk3fnl6nv2e     node02.srv.world    Ready     Active
vcns353o59ye47zw5mi7dmdua *   node01.srv.world    Ready     Active         Leader
woeo3nhvlv3tin793n8k677v0     node03.srv.world    Ready     Active
[5]
After creating Swarm Cluster, next, configure services that the Swarm Cluster provides.
Create the same container image on all Nodes for the service first.
On this exmaple, use a Container image which provides http service like an example of the link.
[6] Configure service on Manager Node.
After successing to configure service, access to the Manager node's Hostname or IP address to verify it works normally. By the way, requests to worker nodes are load-balanced with round-robin like follows.
root@node01:~#
docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
web_server          latest              fc43f53a680b        6 seconds ago       296MB
debian              latest              a20fd0d59cf1        10 days ago         100MB

# create a service with 2 repricas

root@node01:~#
docker service create --name swarm_cluster --replicas=2 -p 80:80 web_server:latest

m7zmin5vo21qu7i3crkytxpq6
# show service list

root@node01:~#
docker service ls

ID              NAME             MODE           REPLICAS      IMAGE               PORTS
m7zmin5vo21q    swarm_cluster    replicated     2/2           web_server:latest   *:80->80/tcp

# inspect the service

root@node01:~#
docker service inspect swarm_cluster --pretty

ID:             m7zmin5vo21qu7i3crkytxpq6
Name:           swarm_cluster
Service Mode:   Replicated
 Replicas:      2
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         web_server:latest
Resources:
Endpoint Mode:  vip
Ports:
 PublishedPort = 80
  Protocol = tcp
  TargetPort = 80
  PublishMode = ingress

# show service state

root@node01:~#
docker service ps swarm_cluster

ID            NAME             IMAGE               NODE                DESIRED STATE  CURRENT STATE     
ixth3hy90ufk  swarm_cluster.1  web_server:latest   node02.srv.world    Running        Running about a mi..
hze4wl2w8a18  swarm_cluster.2  web_server:latest   node01.srv.world    Running        Running about a mi..

# verify it works normally

root@node01:~#
curl http://node01.srv.world/

node02
root@node01:~#
curl http://node01.srv.world/

node01
root@node01:~#
curl http://node01.srv.world/

node02
root@node01:~#
curl http://node01.srv.world/

node01
[7] If you'd like to change the number of repricas, configure like follows.
# change repricas to 3

root@node01:~#
docker service scale swarm_cluster=3

swarm_cluster scaled to 3
root@node01:~#
docker service ps swarm_cluster

ID            NAME             IMAGE               NODE              DESIRED STATE CURRENT STATE   
ixth3hy90ufk  swarm_cluster.1  web_server:latest   node02.srv.world  Running       Running 3 minute..
hze4wl2w8a18  swarm_cluster.2  web_server:latest   node01.srv.world  Running       Running 3 minute..
lfi7vo0gvcf0  swarm_cluster.3  web_server:latest   node03.srv.world  Running       Running 3 second..

# verify working

root@node01:~#
curl http://node01.srv.world/

node02
root@node01:~#
curl http://node01.srv.world/

node03
root@node01:~#
curl http://node01.srv.world/

node01
 
Tweet